package com.sam4cloud.oauth2.project.service;

import com.github.yulichang.base.service.MPJJoinService;
import com.sam4cloud.oauth2.project.model.dto.OauthAccountDTO;
import com.sam4cloud.oauth2.project.model.entity.OauthAccount;
import com.sam4cloud.oauth2.project.model.vo.AccessTokenVO;

/**
 * <p>
 * 认证账户表 服务类
 * </p>
 *
 * @author Sam
 * @since 2022-12-05
 */
public interface IOauthAccountService extends MPJJoinService<OauthAccount> {

    /**
     * 创建账户
     */
    void addAccount(OauthAccountDTO oauthAccountDTO);

    /**
     * 检测账户合法性
     *
     * @param appId     企业id
     * @param appSecret 企业密钥
     * @param reqIp     请求ip
     * @return 账户信息
     */
    OauthAccount checkAccountValid(String appId, String appSecret, String reqIp);

    /**
     * 生成一次性认证code
     *
     * @param appId       企业id
     * @param reqIp       请求ip
     * @param redirectUrl 重定向地址
     * @return 一次性code
     */
    String createTempCode(String appId, String reqIp, String redirectUrl);

    /**
     * 生成认证凭证
     *
     * @param appId     企业id
     * @param appSecret 企业密钥
     * @param reqIp     请求ip
     * @return
     */
    AccessTokenVO createAccessToken(String appId, String appSecret, String reqIp);

    /**
     * 生成临时用户认证凭证
     *
     * @param appId     企业id
     * @param appSecret 企业密钥
     * @param reqIp     请求ip
     * @return 临时用户认证凭证
     */
    AccessTokenVO createTempAccessToken(String appId, String appSecret, String reqIp);

    /**
     * @param accessToken 认证凭证
     * @param code        临时用户认证凭证
     * @return 用户信息
     */
    AccessTokenVO getUserInfo(String accessToken, String code);
}
